public class Solution {
//动态规划
public int numDecodings(String s) {
        int n=s.length();
        char[] arr=s.toCharArray();
        int[] dp=new int[n];
        //解码第一个位置dp[0]
        if(arr[0]!='0'){
        dp[0]=1;
        }

        if(n==1){
        return dp[0];
        }

        //第二个位置单独解码
        if(arr[1]!='0' && arr[0]!='0'){
        dp[1]+=1;
        }
        //第二个位置与第一个位置组合解码
        int a=(arr[0]-'0')*10+arr[1]-'0';
        if(a>=10&&a<=26){
        dp[1]+=1;
        }

        for(int i=2;i<n;i++){
        //如果单独解码
        if(arr[i]!='0'){
        dp[i]+=dp[i-1];
        }
        //如果与前一个字符一起解码
        int t=(arr[i-1]-'0')*10+(arr[i]-'0');
        if(t>=10&&t<=26){
        dp[i]+=dp[i-2];
        }
        }
        return dp[n-1];

        }
        }